package com.ungs.form.impl;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import com.ungs.bo.OrdenTrabajoBO;
import com.ungs.bo.impl.OrdenTrabajoBOImpl;
import com.ungs.entities.OrdenTrabajo;
import com.ungs.utils.Fechas;

public class InicioFormImpl {
	private OrdenTrabajoBO ordenTrabajoBO;
	private static int COL_COD_OT = 0;
	private static int COL_FECHA_PROM = 1;
	private static int COL_CLIENTE = 2;
	private static int COL_NOMBRE_CORTO = 3;
	private static int COL_ESTADO = 4;

	public InicioFormImpl() {
		ordenTrabajoBO = new OrdenTrabajoBOImpl();
	}

	public void cargarTablaOrdenesTrabajo(JTable tbOrdenesTrabajo,
			boolean finalizado) {
		List<OrdenTrabajo> ordenTrabajoList = new ArrayList<OrdenTrabajo>();
		// Se borra la tabla
		DefaultTableModel modeloTabla = (DefaultTableModel) tbOrdenesTrabajo
				.getModel();
		int filas = modeloTabla.getRowCount() - 1;
		if (filas >= 0) {
			for (int i = filas; i >= 0; i--) {
				modeloTabla.removeRow(i);
			}
		}

		if (finalizado) {
			ordenTrabajoList = ordenTrabajoBO.getOrdenTrabajoUrgente();
		} else {
			ordenTrabajoList = ordenTrabajoBO.getAllOrdenTrabajo();
		}

		int fila = 0;
		// Se llena la tabla
		for (OrdenTrabajo ordenTrabajo : ordenTrabajoList) {
			if (fila < 5) {

				String estado = ordenTrabajoBO.estadoProcesoOT(ordenTrabajo);
				DefaultTableModel modelo = (DefaultTableModel) tbOrdenesTrabajo
						.getModel();
				modelo.addRow(new Object[1]);
				String fechaPrometida = "";
				if (ordenTrabajo.getFechaPrometida() != null)
					fechaPrometida = Fechas.getFechaString(ordenTrabajo
							.getFechaPrometida());

				tbOrdenesTrabajo.setValueAt(
						ordenTrabajo.getNumIdentificatorio(), fila, COL_COD_OT);
				tbOrdenesTrabajo.setValueAt((Object) fechaPrometida, fila,
						COL_FECHA_PROM);
				if (ordenTrabajo.getCliente() != null) {
					tbOrdenesTrabajo.setValueAt(ordenTrabajo.getCliente()
							.getRazonSocial(), fila, COL_CLIENTE);
				}
				tbOrdenesTrabajo.setValueAt(ordenTrabajo.getNombreCorto(),
						fila, COL_NOMBRE_CORTO);
				tbOrdenesTrabajo.setValueAt(estado, fila, COL_ESTADO);
			}
			fila++;

		}
	}

	public void formatoTablaOrdenesTrabajo(JTable tbOrdenesTrabajo, int ancho) {
		DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
		tcr.setHorizontalAlignment(SwingConstants.CENTER);
		tbOrdenesTrabajo.getColumnModel().getColumn(1).setCellRenderer(tcr);

		int anchoColumna = 0;
		TableColumnModel modeloColumna = tbOrdenesTrabajo.getColumnModel();
		TableColumn columnaTabla;

		for (int i = 0; i < tbOrdenesTrabajo.getColumnCount(); i++) {
			columnaTabla = modeloColumna.getColumn(i);
			switch (i) {
			case 0:
				anchoColumna = (15 * ancho) / 100; // cod ot
				break;
			case 1:
				anchoColumna = (10 * ancho) / 100; // fecha prometida
				break;
			case 2:
				anchoColumna = (15 * ancho) / 100; // cliente
				break;
			case 3:
				anchoColumna = (10 * ancho) / 100; // nombre corto
				break;
			case 4:
				anchoColumna = (35 * ancho) / 100; // descripcion
				break;
			case 5:
				anchoColumna = (15 * ancho) / 100; // estado
				break;
			}
			columnaTabla.setPreferredWidth(anchoColumna);
		}
	}

	public OrdenTrabajo getOrdenTrabajoPorNumIdentificatorio(
			String numIdentificatorio) {
		return ordenTrabajoBO
				.getOrdenTrabajoByNumIdentificatorio(numIdentificatorio);
	}

	public List<Calendar> fechasParaCalendario() {
		return ordenTrabajoBO.getFechasOrdenTrabajo();
	}

	public List<OrdenTrabajo> getOrdenTrabajoPorFecha(Date fechaBusqueda) {
		return ordenTrabajoBO.getOrdenTrabajoByFecha(fechaBusqueda);
	}

}
